async function scheduleHtmlProvider(iframeContent = '', frameContent = '', dom = document) {
    // 引入工具
    await loadTool('AIScheduleTools')
    const phone = '\n有问题请联系 qq/wx：18218644665'

    // 确保弹窗函数可用
    if (typeof AIScheduleAlert === 'undefined') {
        var AIScheduleAlert = alert
    }

    const content = dom.getElementById('mainContentPanle')
    if (!content) {
        await AIScheduleAlert('请在登录完成后并请点击网页右侧到 “学期理论课表” 页面后再点击 “一键导入” ' + phone)
        return 'do not continue'
    }

    // 找到可见iframe
    let frame, frameDom
    for (const node of content.children) {
        if (node.style.display !== 'none') {
            frame = node
            frameDom = node.contentDocument
            break
        }
    }

    // 校验页面标题
    if (!frame || (frameDom.title !== '学期理论课表' && frameDom.title !== '个人课表信息')) {
        await AIScheduleAlert('当前页面不是有效课表页面，请切换到正确的课表页面' + phone)
        return 'do not continue'
    }

    // 弹窗确认是否开始导入
    const userConfirm = await AIScheduleConfirm({
        titleText: '提示',
        contentText: '恭喜你！找到正确位置，是否开始导入？' + phone,
        cancelText: '取消',
        confirmText: '开始导入'
    })
    if (!userConfirm) return 'do not continue'

    // 获取课表并克隆
    const timetable = frameDom.getElementById('kbtable')?.cloneNode(true)
    if (!timetable) {
        await AIScheduleAlert('未找到课表，请检查页面' + phone)
        return 'do not continue'
    }

    // 清理隐藏元素
    checkHidden(timetable.querySelector('tbody'))

    // 移动第二列到最后，保持结构一致
    moveSecondColumnToEnd(timetable.querySelector('tbody'))

    // 返回最终HTML
    return timetable.outerHTML
}

// 递归删除隐藏元素
function checkHidden(element) {
    if (!element) return
    if (element.type === 'hidden' || element.style.display === 'none') {
        element.remove()
    } else {
        Array.from(element.children).forEach(checkHidden)
    }
}

// 移动第二列到最后
function moveSecondColumnToEnd(table) {
    if (!table) return
    const rows = table.rows
    for (let i = 0; i < rows.length; i++) {
        const cells = rows[i].cells
        if (cells.length > 1) {
            const secondCell = cells[1]
            rows[i].appendChild(secondCell)
        }
    }
}
